package com.hnist.empdemo.view.component;

import com.hnist.empdemo.pojo.Employee;
import com.hnist.empdemo.service.Impl.employServiceImpl;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType;
import javafx.scene.control.TableView;
import javafx.stage.FileChooser;
import javafx.stage.Window;

import java.io.File;
import java.util.List;

/**
 * 文件选择对话框工具类
 */
public class FileChooserDialog {

    private Window parentWindow;
    private TableView<Employee> employeeTable;

    public FileChooserDialog(Window parentWindow, TableView<Employee> employeeTable) {
        this.parentWindow = parentWindow;
        this.employeeTable = employeeTable;
    }

    /**
     * 显示文件导入对话框
     */
    public void showImportFileDialog() {
        // 创建文件选择器
        FileChooser fileChooser = new FileChooser();
        fileChooser.setTitle("选择要导入的Excel文件");

        // 设置文件过滤器，只显示Excel文件
        FileChooser.ExtensionFilter excelFilter = new FileChooser.ExtensionFilter(
                "Excel文件 (*.xlsx, *.xls)", "*.xlsx", "*.xls"
        );
        fileChooser.getExtensionFilters().add(excelFilter);

        // 打开文件选择对话框
        File selectedFile = fileChooser.showOpenDialog(parentWindow);

        if (selectedFile != null) {
            try {
                // 调用服务的读取文件功能
                employServiceImpl.getInstance().readInfoFromFile(selectedFile.getAbsolutePath());
                // 刷新表格数据
                List<Employee> employees = employServiceImpl.getInstance().listAllDeptOrPosOrEmpInfo(Employee.class);
                employeeTable.getItems().clear();
                employeeTable.getItems().addAll(employees);

                // 显示成功提示
                showAlert(Alert.AlertType.INFORMATION, "提示", "数据导入完成");
            } catch (Exception ex) {
                showAlert(Alert.AlertType.ERROR, "导入失败", "文件格式不正确或文件已损坏: " + ex.getMessage());
            }
        }
    }

    /**
     * 显示文件导出对话框
     */
    public void showExportFileDialog() {
        // 创建文件保存选择器
        FileChooser fileChooser = new FileChooser();
        fileChooser.setTitle("保存Excel文件");

        // 设置默认文件名
        fileChooser.setInitialFileName("员工信息表");

        // 设置文件过滤器，只显示Excel文件
        FileChooser.ExtensionFilter excelFilter = new FileChooser.ExtensionFilter(
                "Excel文件 (*.xlsx)", "*.xlsx"
        );
        fileChooser.getExtensionFilters().add(excelFilter);

        // 打开文件保存对话框
        File selectedFile = fileChooser.showSaveDialog(parentWindow);

        if (selectedFile != null) {
            try {
                // 调用服务的保存文件功能（使用新的重载方法）
                employServiceImpl.getInstance().saveInfoToFile(selectedFile.getAbsolutePath());
                showAlert(Alert.AlertType.INFORMATION, "提示", "数据导出成功\n保存路径：" + selectedFile.getAbsolutePath());
            } catch (Exception ex) {
                showAlert(Alert.AlertType.ERROR, "导出失败", "导出过程中发生错误: " + ex.getMessage());
            }
        }
    }

    /**
     * 显示提示信息对话框
     */
    private void showAlert(Alert.AlertType type, String title, String content) {
        Alert alert = new Alert(type);
        alert.setTitle(title);
        alert.setHeaderText(null);
        alert.setContentText(content);
        alert.showAndWait();
    }
}